package tools

import (
	"bufio"
	"encoding/json"
	"os"
)

// DatabaseConfig 数据库配置信息
type DatabaseConfig struct {
	Driver   string `json:"driver"`
	Username string `json:"username"`
	Password string `json:"password"`
	Host     string `json:"host"`
	Port     string `json:"port"`
	DbName   string `json:"db_name"`
	Charset  string `json:"charset"`
	ShowSQL  bool   `json:"show_sql"`
}

// AppConfig 服务端配置
type AppConfig struct {
	AppName    string         `json:"app_name"`
	Port       string         `json:"port"`
	StaticPath string         `json:"static_path"`
	Mode       string         `json:"mode"`
	Database   DatabaseConfig `json:"database"`
}

// ServConfig 全局变量
var ServConfig *AppConfig = nil

// InitConfig 初始化服务器配置
func InitConfig(path string) (*AppConfig, error) {
	file, err := os.Open(path)
	if err != nil {
		panic(err.Error())
	}
	defer file.Close()

	reader := bufio.NewReader(file)
	// 解析器
	decoder := json.NewDecoder(reader)
	if err := decoder.Decode(&ServConfig); err != nil {
		return nil, err
	}
	return ServConfig, nil
}

// GetConfig 由于在main.go 已经解析了一遍，再别的地方通过此函数获取该变量即可
func GetConfig() *AppConfig {
	return ServConfig
}
